package main

import (
	"./src/Fanlevel"
	"./src/ParaSet"
	"fmt"
	"github.com/bitly/go-simplejson"
	"io/ioutil"
	"log"
	"os"
	"path/filepath"
	"strings"
)

const (
	OUTPUT_FILE_NAME = "output"
)

func check(e error) {
	if e != nil {
		panic(e)
	}
}

func main() {
	bytes, err := ioutil.ReadFile("set.json") //读取同一目录下的文件,解析的json不要带注释
	check(err)
	json, err := simplejson.NewJson(bytes)
	if err != nil {
		fmt.Println(err)
	}

	reb := []byte{}

	ps := ParaSet.ParaSet{} //参数设置结构体
	ps.SetValue(json.Get("parameter_set"))
	b := ps.Tobytes()
	//fmt.Println(b)
	reb = append(reb, b...) //二进制文件的第一部分为参数结构体

	fl := &Fanlevel.FanLevelAllStruct{}    //通风等级表结构体
	fl.SetCurtain(json.Get("curtain_set")) //将水帘表加入整个通风等级表中
	fl.SetIvFan(json.Get("ivfan_set"))     //将水帘表加入整个通风等级表中
	fl.SetLv(json.Get("lv_set"))           //将1间断设备列表 2.单向设备列表 3.温差 4.轮询设备列表加入整个通风等级表中
	fl.CalSTLen()
	b = fl.Tobytes()
	fmt.Println(b)
	fmt.Println(fl)
	reb = append(reb, b...) //二进制文件的第一部分为参数结构体

	if isDirExistsInCurDir(OUTPUT_FILE_NAME) {
	} else {
		os.Mkdir(OUTPUT_FILE_NAME, 0777)
	}
	curdir := getCurrentDirectory()
	PthSep := string(os.PathSeparator) //分割符 /
	//H:\goproject\go-wlwjsontobin\output\set.js2b
	filepath := curdir + PthSep + OUTPUT_FILE_NAME + PthSep + "set.js2b"
	fmt.Println(filepath)
	file, _ := os.OpenFile(filepath, os.O_WRONLY|os.O_CREATE, os.ModePerm)
	file.Write(reb)
}

//判断目录是否存在，当前文件夹内
func isDirExistsInCurDir(path string) bool {
	curdir := getCurrentDirectory()
	PthSep := string(os.PathSeparator) //分割符 /
	fi, err := os.Stat(curdir + PthSep + path)

	if err != nil {
		return os.IsExist(err)
	} else {
		return fi.IsDir()
	}

	panic("not reached")
}

//获取当前路径
func getCurrentDirectory() string {
	dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
	if err != nil {
		log.Fatal(err)
	}
	return dir
	return strings.Replace(dir, "\\", "/", -1) //将路径中的\\变为/显示时是没有必要的
}
